package br.com.tabletcaixa.estoque;

import java.util.ArrayList;
import java.util.List;

import br.com.tabletcaixa.db.DBHelper;
import br.com.tabletcaixa.usuario.UsuarioVO;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;

public class EstoqueDAO {

	private SQLiteDatabase db;
	private DBHelper dbHelper;

	private String[] colunas = { DBHelper.ESTOQUE_ID, DBHelper.ESTOQUE_CODIGO,
			DBHelper.ESTOQUE_CODIGO_FABRICA, DBHelper.ESTOQUE_DESCRICAO,
			DBHelper.ESTOQUE_UNIDADE, DBHelper.ESTOQUE_SALDO,
			DBHelper.ESTOQUE_PRECO_VENDA };

	public EstoqueDAO(Context context) {

		dbHelper = new DBHelper(context);

	}

	public void conectar() {

		db = dbHelper.getWritableDatabase();

	}

	public void desconectar() {

		dbHelper.close();

	}

	public long cadastrarEstoque(Context context, EstoqueVO estoque) {

		try {

			ContentValues values = new ContentValues();
			values.put(DBHelper.ESTOQUE_CODIGO, estoque.getCodigo());
			values.put(DBHelper.ESTOQUE_CODIGO_FABRICA,
					estoque.getCodigoFabrica());
			values.put(DBHelper.ESTOQUE_DESCRICAO, estoque.getDescricao());
			values.put(DBHelper.ESTOQUE_UNIDADE, estoque.getUnidade());
			values.put(DBHelper.ESTOQUE_SALDO, estoque.getSaldo());
			values.put(DBHelper.ESTOQUE_PRECO_VENDA, estoque.getPrecoVenda());

			return db.insert(DBHelper.TBL_ESTOQUE, null, values);

		} catch (Exception e) {

			Toast.makeText(context,
					"Erro ao cadastrar estoque: /n" + e.getMessage(),
					Toast.LENGTH_LONG).show();

		}

		return 0;

	}

	public long excluirEstoque(Context context, EstoqueVO estoque) {

		try {

			long id = estoque.getId();
			
			ContentValues values = new ContentValues();
			values.put(DBHelper.ESTOQUE_CODIGO, estoque.getCodigo());
			values.put(DBHelper.ESTOQUE_CODIGO_FABRICA,
					estoque.getCodigoFabrica());
			values.put(DBHelper.ESTOQUE_DESCRICAO, estoque.getDescricao());
			values.put(DBHelper.ESTOQUE_UNIDADE, estoque.getUnidade());
			values.put(DBHelper.ESTOQUE_SALDO, estoque.getSaldo());
			values.put(DBHelper.ESTOQUE_PRECO_VENDA, estoque.getPrecoVenda());

			return db.delete(DBHelper.TBL_ESTOQUE, DBHelper.ESTOQUE_ID + " = " + id, null);

		} catch (Exception e) {

			Toast.makeText(context,
					"Erro ao cadastrar estoque: /n" + e.getMessage(),
					Toast.LENGTH_LONG).show();

		}

		return 0;

	}
	
	public long alterarEstoque(Context context, EstoqueVO estoque) {

		try {

			long id = estoque.getId();

			ContentValues values = new ContentValues();
			values.put(DBHelper.ESTOQUE_CODIGO, estoque.getCodigo());
			values.put(DBHelper.ESTOQUE_CODIGO_FABRICA,
					estoque.getCodigoFabrica());
			values.put(DBHelper.ESTOQUE_DESCRICAO, estoque.getDescricao());
			values.put(DBHelper.ESTOQUE_UNIDADE, estoque.getUnidade());
			values.put(DBHelper.ESTOQUE_SALDO, estoque.getSaldo());
			values.put(DBHelper.ESTOQUE_PRECO_VENDA, estoque.getPrecoVenda());

			return db.update(DBHelper.TBL_ESTOQUE, values, DBHelper.ESTOQUE_ID + " = " + id, null);

		} catch (Exception e) {

			Toast.makeText(context,
					"Erro ao alterar estoque: /n" + e.getMessage(),
					Toast.LENGTH_LONG).show();

		}

		return 0;

	}

	public void excluirTodoEstoque() {

		db.execSQL("DELETE FROM " + DBHelper.TBL_ESTOQUE);

	}

	public List<EstoqueVO> consultarEstoque(String descricao) {

		List<EstoqueVO> lstEstoque = new ArrayList<EstoqueVO>();

		Cursor cursor = db.query(DBHelper.TBL_ESTOQUE, colunas, 
				DBHelper.ESTOQUE_DESCRICAO + " LIKE '%" + descricao + "%'", null, null, null, null);

		cursor.moveToFirst();

		while (!cursor.isAfterLast()) {

			EstoqueVO lEstoque = cursorToEstoque(cursor);
			lstEstoque.add(lEstoque);
			cursor.moveToNext();

		}

		cursor.close();
		return lstEstoque;

	}
	
	public List<EstoqueVO> consultarEstoqueCodigo(String codigo) {

		List<EstoqueVO> lstEstoque = new ArrayList<EstoqueVO>();

		Cursor cursor = db.query(DBHelper.TBL_ESTOQUE, colunas, 
				DBHelper.ESTOQUE_CODIGO + " = '" + codigo + "'", null, null, null, null);

		cursor.moveToFirst();

		while (!cursor.isAfterLast()) {

			EstoqueVO lEstoque = cursorToEstoque(cursor);
			lstEstoque.add(lEstoque);
			cursor.moveToNext();

		}

		cursor.close();
		return lstEstoque;

	}

	public EstoqueVO cursorToEstoque(Cursor cursor) {

		EstoqueVO estoque = new EstoqueVO();

		estoque.setId(cursor.getLong(0));
		estoque.setCodigo(cursor.getString(1));
		estoque.setCodigoFabrica(cursor.getString(2));
		estoque.setDescricao(cursor.getString(3));
		estoque.setUnidade(cursor.getString(4));
		estoque.setSaldo(cursor.getString(5));
		estoque.setPrecoVenda(cursor.getDouble(6));

		return estoque;

	}

}
